package com.sf.sgs.sessionevaluate.controller;

import java.util.List;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.sf.sgs.sessionevaluate.controller.dto.req.QuestionnaireCompositeReq;
import com.sf.sgs.sessionevaluate.controller.dto.resp.QuestionnaireCompositeResp;
import com.sf.sgs.sessionevaluate.controller.dto.resp.QuestionnaireResp;
import com.sf.sgs.sessionevaluate.controller.response.RestResponse;
import com.sf.sgs.sessionevaluate.domain.Questionnaire;
import com.sf.sgs.sessionevaluate.service.IQuestionnaireService;
import com.sf.sgs.sessionevaluate.util.BeanUtil;

@Controller
@RequestMapping("questionnaires")
public class QuestionnaireController extends BaseController {

	private static final int TEMPLATE_TYPE = 1;

	@Autowired
	private IQuestionnaireService questionnaireService;

	// 问卷保存接口
	@RequestMapping(method = RequestMethod.POST)
	@ResponseBody
	public RestResponse<Boolean> saveInfo(@RequestBody QuestionnaireCompositeReq questionnaireCompositeReq) {

		RestResponse<Boolean> response = handle(new BaseController.Action<Boolean>() {

			@Override
			public void onHandle(RestResponse<Boolean> response) {

				questionnaireService.save(questionnaireCompositeReq);
				response.setResult(true);
			}

		});

		return response;

	}

	// 问卷查询接口
	@RequestMapping(value = "/{id}/{type}", method = RequestMethod.GET)
	@ResponseBody
	public RestResponse<QuestionnaireCompositeResp> get(@PathVariable(value = "id") Long id, @PathVariable(value = "type") Integer type) {
		return handle(new Action<QuestionnaireCompositeResp>() {

			@Override
			public void onHandle(RestResponse<QuestionnaireCompositeResp> restResponse) {
				QuestionnaireCompositeResp questionnaireCompositeResp = questionnaireService.getCompositeInfo(id, type);
				restResponse.setResult(questionnaireCompositeResp);
			}
		});
	}

	// 模板列表查询接口
	@RequestMapping(value = "/templates", method = RequestMethod.GET)
	@ResponseBody
	public RestResponse<List<QuestionnaireResp>> getList() {
		return handle(new Action<List<QuestionnaireResp>>() {

			@Override
			public void onHandle(RestResponse<List<QuestionnaireResp>> restResponse) {
				List<Questionnaire> list = questionnaireService.getList(TEMPLATE_TYPE);
				List<QuestionnaireResp> result = list.parallelStream().map(o -> BeanUtil.copyProperties(o, QuestionnaireResp.class)).collect(Collectors.toList());
				restResponse.setResult(result);
			}
		});
	}

}
